<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    
</body>
<script>
    // 更改this指向的方法  
    // call   apply   bind     箭头函数
     let obj = {
        name:'张三'
     }
    function fun(name1,name2){
        console.log(name1);
        console.log(name2);
     console.log(this);
    }

    // fun.call(obj,'李四','王五') //call第一个参数 你更改的this指向，第二个参数字符串 传第多个参数 用,隔开  （立即调用）
    // fun.apply(obj,['李四','王五'])//apply第一个参数 你更改的this指向，第二个参数是一个数组  （立即调用）
    fun.bind(obj)('李四','王五') //bind第一个参数 你更改的this指向 bind 不会立即调用，自己调用才会触发，后面的参数，用,隔开



    // let ob1 = {
    //     name:'刘德华',
    //     sing:function(){
    //         console.log(this);
    //         setTimeout(function(){
    //            console.log(this);//this指向window
    //         }.bind(this),2000)
    //     }
    // }
    // ob1.sing()

    // bind 应用场景一般是定时器里面更改this指向  获取事件中  因为apply和call会立即执行




    // 箭头函数更改this指向
    let ob1 = {
        name:'刘德华',
        sing:function(){
            console.log(this);
            setTimeout(()=>{
                console.log(this);
            },2000)
        }
    }
    ob1.sing()


</script>
</html>